<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  
  
  <title>Hexo</title>
  <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
  <meta property="og:type" content="website">
<meta property="og:title" content="Hexo">
<meta property="og:url" content="https://goofyer.gitee.io/notes-on-computer-expertise/page/12/index.html">
<meta property="og:site_name" content="Hexo">
<meta property="og:locale" content="en_US">
<meta property="article:author" content="John Doe">
<meta name="twitter:card" content="summary">
  
    <link rel="alternate" href="/notes-on-computer-expertise/atom.xml" title="Hexo" type="application/atom+xml">
  
  
    <link rel="shortcut icon" href="/notes-on-computer-expertise/favicon.png">
  
  
    
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/typeface-source-code-pro@0.0.71/index.min.css">

  
  
<link rel="stylesheet" href="/notes-on-computer-expertise/css/style.css">

  
    
<link rel="stylesheet" href="/notes-on-computer-expertise/fancybox/jquery.fancybox.min.css">

  
<meta name="generator" content="Hexo 5.4.0"></head>

<body>
  <div id="container">
    <div id="wrap">
      <header id="header">
  <div id="banner"></div>
  <div id="header-outer" class="outer">
    <div id="header-title" class="inner">
      <h1 id="logo-wrap">
        <a href="/notes-on-computer-expertise/" id="logo">Hexo</a>
      </h1>
      
    </div>
    <div id="header-inner" class="inner">
      <nav id="main-nav">
        <a id="main-nav-toggle" class="nav-icon"></a>
        
          <a class="main-nav-link" href="/notes-on-computer-expertise/">Home</a>
        
          <a class="main-nav-link" href="/notes-on-computer-expertise/archives">Archives</a>
        
      </nav>
      <nav id="sub-nav">
        
          <a id="nav-rss-link" class="nav-icon" href="/notes-on-computer-expertise/atom.xml" title="RSS Feed"></a>
        
        <a id="nav-search-btn" class="nav-icon" title="Search"></a>
      </nav>
      <div id="search-form-wrap">
        <form action="//google.com/search" method="get" accept-charset="UTF-8" class="search-form"><input type="search" name="q" class="search-form-input" placeholder="Search"><button type="submit" class="search-form-submit">&#xF002;</button><input type="hidden" name="sitesearch" value="https://goofyer.gitee.io/notes-on-computer-expertise"></form>
      </div>
    </div>
  </div>
</header>

      <div class="outer">
        <section id="main">
  
    <article id="post-创造模式/结构型设计模式/享元设计模式" class="h-entry article article-type-post" itemprop="blogPost" itemscope itemtype="https://schema.org/BlogPosting">
  <div class="article-meta">
    <a href="/notes-on-computer-expertise/2021/12/19/%E5%88%9B%E9%80%A0%E6%A8%A1%E5%BC%8F/%E7%BB%93%E6%9E%84%E5%9E%8B%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F/%E4%BA%AB%E5%85%83%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F/" class="article-date">
  <time class="dt-published" datetime="2021-12-19T01:27:55.000Z" itemprop="datePublished">2021-12-19</time>
</a>
    
  </div>
  <div class="article-inner">
    
    
      <header class="article-header">
        
  
    <h1 itemprop="name">
      <a class="p-name article-title" href="/notes-on-computer-expertise/2021/12/19/%E5%88%9B%E9%80%A0%E6%A8%A1%E5%BC%8F/%E7%BB%93%E6%9E%84%E5%9E%8B%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F/%E4%BA%AB%E5%85%83%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F/">享元设计模式</a>
    </h1>
  

      </header>
    
    <div class="e-content article-entry" itemprop="articleBody">
      
        
      
    </div>
    <footer class="article-footer">
      <a data-url="https://goofyer.gitee.io/notes-on-computer-expertise/2021/12/19/%E5%88%9B%E9%80%A0%E6%A8%A1%E5%BC%8F/%E7%BB%93%E6%9E%84%E5%9E%8B%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F/%E4%BA%AB%E5%85%83%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F/" data-id="cl403sxt1005lf8vug9014cpt" data-title="享元设计模式" class="article-share-link">Share</a>
      
      
      
    </footer>
  </div>
  
</article>



  
    <article id="post-创造模式/结构型设计模式/门面设计模式" class="h-entry article article-type-post" itemprop="blogPost" itemscope itemtype="https://schema.org/BlogPosting">
  <div class="article-meta">
    <a href="/notes-on-computer-expertise/2021/12/19/%E5%88%9B%E9%80%A0%E6%A8%A1%E5%BC%8F/%E7%BB%93%E6%9E%84%E5%9E%8B%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F/%E9%97%A8%E9%9D%A2%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F/" class="article-date">
  <time class="dt-published" datetime="2021-12-19T01:27:38.000Z" itemprop="datePublished">2021-12-19</time>
</a>
    
  </div>
  <div class="article-inner">
    
    
      <header class="article-header">
        
  
    <h1 itemprop="name">
      <a class="p-name article-title" href="/notes-on-computer-expertise/2021/12/19/%E5%88%9B%E9%80%A0%E6%A8%A1%E5%BC%8F/%E7%BB%93%E6%9E%84%E5%9E%8B%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F/%E9%97%A8%E9%9D%A2%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F/">门面设计模式</a>
    </h1>
  

      </header>
    
    <div class="e-content article-entry" itemprop="articleBody">
      
        
      
    </div>
    <footer class="article-footer">
      <a data-url="https://goofyer.gitee.io/notes-on-computer-expertise/2021/12/19/%E5%88%9B%E9%80%A0%E6%A8%A1%E5%BC%8F/%E7%BB%93%E6%9E%84%E5%9E%8B%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F/%E9%97%A8%E9%9D%A2%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F/" data-id="cl403sxt4005qf8vu7ep49ak3" data-title="门面设计模式" class="article-share-link">Share</a>
      
      
      
    </footer>
  </div>
  
</article>



  
    <article id="post-创造模式/结构型设计模式/装饰设计模式" class="h-entry article article-type-post" itemprop="blogPost" itemscope itemtype="https://schema.org/BlogPosting">
  <div class="article-meta">
    <a href="/notes-on-computer-expertise/2021/12/19/%E5%88%9B%E9%80%A0%E6%A8%A1%E5%BC%8F/%E7%BB%93%E6%9E%84%E5%9E%8B%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F/%E8%A3%85%E9%A5%B0%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F/" class="article-date">
  <time class="dt-published" datetime="2021-12-19T01:27:22.000Z" itemprop="datePublished">2021-12-19</time>
</a>
    
  </div>
  <div class="article-inner">
    
    
      <header class="article-header">
        
  
    <h1 itemprop="name">
      <a class="p-name article-title" href="/notes-on-computer-expertise/2021/12/19/%E5%88%9B%E9%80%A0%E6%A8%A1%E5%BC%8F/%E7%BB%93%E6%9E%84%E5%9E%8B%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F/%E8%A3%85%E9%A5%B0%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F/">装饰设计模式</a>
    </h1>
  

      </header>
    
    <div class="e-content article-entry" itemprop="articleBody">
      
        
      
    </div>
    <footer class="article-footer">
      <a data-url="https://goofyer.gitee.io/notes-on-computer-expertise/2021/12/19/%E5%88%9B%E9%80%A0%E6%A8%A1%E5%BC%8F/%E7%BB%93%E6%9E%84%E5%9E%8B%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F/%E8%A3%85%E9%A5%B0%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F/" data-id="cl403sxt3005of8vug6lk5ii8" data-title="装饰设计模式" class="article-share-link">Share</a>
      
      
      
    </footer>
  </div>
  
</article>



  
    <article id="post-创造模式/结构型设计模式/组合设计模式" class="h-entry article article-type-post" itemprop="blogPost" itemscope itemtype="https://schema.org/BlogPosting">
  <div class="article-meta">
    <a href="/notes-on-computer-expertise/2021/12/19/%E5%88%9B%E9%80%A0%E6%A8%A1%E5%BC%8F/%E7%BB%93%E6%9E%84%E5%9E%8B%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F/%E7%BB%84%E5%90%88%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F/" class="article-date">
  <time class="dt-published" datetime="2021-12-19T01:27:01.000Z" itemprop="datePublished">2021-12-19</time>
</a>
    
  </div>
  <div class="article-inner">
    
    
      <header class="article-header">
        
  
    <h1 itemprop="name">
      <a class="p-name article-title" href="/notes-on-computer-expertise/2021/12/19/%E5%88%9B%E9%80%A0%E6%A8%A1%E5%BC%8F/%E7%BB%93%E6%9E%84%E5%9E%8B%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F/%E7%BB%84%E5%90%88%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F/">组合设计模式</a>
    </h1>
  

      </header>
    
    <div class="e-content article-entry" itemprop="articleBody">
      
        
      
    </div>
    <footer class="article-footer">
      <a data-url="https://goofyer.gitee.io/notes-on-computer-expertise/2021/12/19/%E5%88%9B%E9%80%A0%E6%A8%A1%E5%BC%8F/%E7%BB%93%E6%9E%84%E5%9E%8B%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F/%E7%BB%84%E5%90%88%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F/" data-id="cl403sxt2005nf8vucp1882os" data-title="组合设计模式" class="article-share-link">Share</a>
      
      
      
    </footer>
  </div>
  
</article>



  
    <article id="post-创造模式/结构型设计模式/桥接设计模式" class="h-entry article article-type-post" itemprop="blogPost" itemscope itemtype="https://schema.org/BlogPosting">
  <div class="article-meta">
    <a href="/notes-on-computer-expertise/2021/12/19/%E5%88%9B%E9%80%A0%E6%A8%A1%E5%BC%8F/%E7%BB%93%E6%9E%84%E5%9E%8B%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F/%E6%A1%A5%E6%8E%A5%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F/" class="article-date">
  <time class="dt-published" datetime="2021-12-19T01:26:18.000Z" itemprop="datePublished">2021-12-19</time>
</a>
    
  </div>
  <div class="article-inner">
    
    
      <header class="article-header">
        
  
    <h1 itemprop="name">
      <a class="p-name article-title" href="/notes-on-computer-expertise/2021/12/19/%E5%88%9B%E9%80%A0%E6%A8%A1%E5%BC%8F/%E7%BB%93%E6%9E%84%E5%9E%8B%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F/%E6%A1%A5%E6%8E%A5%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F/">桥接设计模式</a>
    </h1>
  

      </header>
    
    <div class="e-content article-entry" itemprop="articleBody">
      
        
      
    </div>
    <footer class="article-footer">
      <a data-url="https://goofyer.gitee.io/notes-on-computer-expertise/2021/12/19/%E5%88%9B%E9%80%A0%E6%A8%A1%E5%BC%8F/%E7%BB%93%E6%9E%84%E5%9E%8B%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F/%E6%A1%A5%E6%8E%A5%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F/" data-id="cl403sxt1005mf8vugcay6knf" data-title="桥接设计模式" class="article-share-link">Share</a>
      
      
      
    </footer>
  </div>
  
</article>



  
    <article id="post-创造模式/结构型设计模式/适配器设计模式" class="h-entry article article-type-post" itemprop="blogPost" itemscope itemtype="https://schema.org/BlogPosting">
  <div class="article-meta">
    <a href="/notes-on-computer-expertise/2021/12/19/%E5%88%9B%E9%80%A0%E6%A8%A1%E5%BC%8F/%E7%BB%93%E6%9E%84%E5%9E%8B%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F/%E9%80%82%E9%85%8D%E5%99%A8%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F/" class="article-date">
  <time class="dt-published" datetime="2021-12-19T01:25:33.000Z" itemprop="datePublished">2021-12-19</time>
</a>
    
  </div>
  <div class="article-inner">
    
    
      <header class="article-header">
        
  
    <h1 itemprop="name">
      <a class="p-name article-title" href="/notes-on-computer-expertise/2021/12/19/%E5%88%9B%E9%80%A0%E6%A8%A1%E5%BC%8F/%E7%BB%93%E6%9E%84%E5%9E%8B%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F/%E9%80%82%E9%85%8D%E5%99%A8%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F/">适配器设计模式</a>
    </h1>
  

      </header>
    
    <div class="e-content article-entry" itemprop="articleBody">
      
        
      
    </div>
    <footer class="article-footer">
      <a data-url="https://goofyer.gitee.io/notes-on-computer-expertise/2021/12/19/%E5%88%9B%E9%80%A0%E6%A8%A1%E5%BC%8F/%E7%BB%93%E6%9E%84%E5%9E%8B%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F/%E9%80%82%E9%85%8D%E5%99%A8%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F/" data-id="cl403sxt4005pf8vu2f474qao" data-title="适配器设计模式" class="article-share-link">Share</a>
      
      
      
    </footer>
  </div>
  
</article>



  
    <article id="post-操作系统/第一章 系统概述" class="h-entry article article-type-post" itemprop="blogPost" itemscope itemtype="https://schema.org/BlogPosting">
  <div class="article-meta">
    <a href="/notes-on-computer-expertise/2021/12/19/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F/%E7%AC%AC%E4%B8%80%E7%AB%A0%20%E7%B3%BB%E7%BB%9F%E6%A6%82%E8%BF%B0/" class="article-date">
  <time class="dt-published" datetime="2021-12-19T01:24:30.000Z" itemprop="datePublished">2021-12-19</time>
</a>
    
  <div class="article-category">
    <a class="article-category-link" href="/notes-on-computer-expertise/categories/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F%E5%9F%BA%E7%A1%80%E7%9F%A5%E8%AF%86/">操作系统基础知识</a>
  </div>

  </div>
  <div class="article-inner">
    
    
      <header class="article-header">
        
  
    <h1 itemprop="name">
      <a class="p-name article-title" href="/notes-on-computer-expertise/2021/12/19/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F/%E7%AC%AC%E4%B8%80%E7%AB%A0%20%E7%B3%BB%E7%BB%9F%E6%A6%82%E8%BF%B0/">第一章 系统概述</a>
    </h1>
  

      </header>
    
    <div class="e-content article-entry" itemprop="articleBody">
      
        <h2 id="第一章-系统概述"><a href="#第一章-系统概述" class="headerlink" title="第一章 系统概述"></a>第一章 系统概述</h2><h3 id="特征"><a href="#特征" class="headerlink" title="特征"></a>特征</h3><ul>
<li><p>并发</p>
</li>
<li><p>共享</p>
</li>
<li>虚拟</li>
<li>异步</li>
</ul>
<h3 id="目标和功能"><a href="#目标和功能" class="headerlink" title="目标和功能"></a>目标和功能</h3><ul>
<li>计算机系统资源的管理者</li>
<li>用户与计算机系统之间的接口</li>
<li><p>扩充机器</p>
<ul>
<li>命令接口</li>
<li>程序接口</li>
<li>GUI</li>
</ul>
</li>
</ul>
<h3 id="发展"><a href="#发展" class="headerlink" title="发展"></a>发展</h3><ul>
<li>批处理操作系统</li>
<li>分时操作系统</li>
<li>实时操作系统</li>
<li>网络和分布式操作系统</li>
</ul>
<h3 id="运行机制"><a href="#运行机制" class="headerlink" title="运行机制"></a>运行机制</h3><ul>
<li>中断和异常</li>
<li>系统调用</li>
</ul>
<h3 id="体系结构"><a href="#体系结构" class="headerlink" title="体系结构"></a>体系结构</h3><ul>
<li>大内核</li>
<li>微内核</li>
</ul>

      
    </div>
    <footer class="article-footer">
      <a data-url="https://goofyer.gitee.io/notes-on-computer-expertise/2021/12/19/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F/%E7%AC%AC%E4%B8%80%E7%AB%A0%20%E7%B3%BB%E7%BB%9F%E6%A6%82%E8%BF%B0/" data-id="cl403sxrr002nf8vu5lk04efk" data-title="第一章 系统概述" class="article-share-link">Share</a>
      
      
      
    </footer>
  </div>
  
</article>



  
    <article id="post-操作系统/第三章 内存管理" class="h-entry article article-type-post" itemprop="blogPost" itemscope itemtype="https://schema.org/BlogPosting">
  <div class="article-meta">
    <a href="/notes-on-computer-expertise/2021/12/19/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F/%E7%AC%AC%E4%B8%89%E7%AB%A0%20%E5%86%85%E5%AD%98%E7%AE%A1%E7%90%86/" class="article-date">
  <time class="dt-published" datetime="2021-12-19T01:24:30.000Z" itemprop="datePublished">2021-12-19</time>
</a>
    
  <div class="article-category">
    <a class="article-category-link" href="/notes-on-computer-expertise/categories/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F%E5%9F%BA%E7%A1%80%E7%9F%A5%E8%AF%86/">操作系统基础知识</a>
  </div>

  </div>
  <div class="article-inner">
    
    
      <header class="article-header">
        
  
    <h1 itemprop="name">
      <a class="p-name article-title" href="/notes-on-computer-expertise/2021/12/19/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F/%E7%AC%AC%E4%B8%89%E7%AB%A0%20%E5%86%85%E5%AD%98%E7%AE%A1%E7%90%86/">第三章 内存管理</a>
    </h1>
  

      </header>
    
    <div class="e-content article-entry" itemprop="articleBody">
      
        <h1 id="第三章-内存管理"><a href="#第三章-内存管理" class="headerlink" title="第三章 内存管理"></a>第三章 内存管理</h1><h2 id="程序执行过程"><a href="#程序执行过程" class="headerlink" title="程序执行过程"></a>程序执行过程</h2><h3 id="引入目的"><a href="#引入目的" class="headerlink" title="引入目的"></a>引入目的</h3><ul>
<li>更好的支持多道程序并发执行，提高系统性能<h3 id="编译、链接、装入"><a href="#编译、链接、装入" class="headerlink" title="编译、链接、装入"></a>编译、链接、装入</h3></li>
<li>编译：由编译程序将用户源代码编译成若干目标模块。</li>
<li>链接：由链接程序将编译后形成的一-组目标模块及所需的库函数链接在一起，形成一个完整的装入模块。<ul>
<li>静态链接：在程序运行之前链接</li>
<li>装入时动态链接：再装入内存时候，采用</li>
<li>运行时动态链接：在程序执行中需要该目标模块时，才对他进行的链接</li>
</ul>
</li>
<li>装入：由装入程序将装入模块装入内存运行。<ul>
<li>绝对装入：适合单道程序环境</li>
<li>静态重定位：适合装入之后不再移动的情况</li>
<li>动态重定位：适合装入时还会移动的情况<h3 id="逻辑地址和物理地址"><a href="#逻辑地址和物理地址" class="headerlink" title="逻辑地址和物理地址"></a>逻辑地址和物理地址</h3></li>
</ul>
</li>
<li>逻辑地址空间：一个源程序在编译或者链接装配后指令和数据所用的所有相对地址的空间</li>
<li>物理地址空间：内存中物理单元的集合<h3 id="内存保护"><a href="#内存保护" class="headerlink" title="内存保护"></a>内存保护</h3></li>
<li>1)在CPU中设置一对上、下限寄存器，存放用户作业在主存中的下限和上限地址，每当cpu要访问一个地址时，分别和两个寄存器的值相比，判断有无越界。</li>
<li>2)采用重定位寄存器(或基址寄存器)和界地址寄存器(又称限长寄存器)来实现这种保护。重定位寄存器含最小的物理地址值，界地址寄存器含逻辑地址的最大值。每个逻辑地址值必须小于界地址寄存器;内存管理机构动态地将逻辑地址与界地址寄存器进行比较较，若未发生地址越界，则加上重定位寄存器的值后映射成物理地址，再送交内存单元<h2 id="扩充内存"><a href="#扩充内存" class="headerlink" title="扩充内存"></a>扩充内存</h2><h3 id="覆盖与变换"><a href="#覆盖与变换" class="headerlink" title="覆盖与变换"></a>覆盖与变换</h3><h2 id="连续分配"><a href="#连续分配" class="headerlink" title="连续分配"></a>连续分配</h2><h3 id="单一连续分配"><a href="#单一连续分配" class="headerlink" title="单一连续分配"></a>单一连续分配</h3><h3 id="固定分区分配-可能出现内部碎块"><a href="#固定分区分配-可能出现内部碎块" class="headerlink" title="固定分区分配(可能出现内部碎块)"></a>固定分区分配(可能出现内部碎块)</h3><h3 id="动态分区分配"><a href="#动态分区分配" class="headerlink" title="动态分区分配"></a>动态分区分配</h3><h4 id="外部碎片"><a href="#外部碎片" class="headerlink" title="外部碎片"></a>外部碎片</h4><h4 id="分配算法：首次-最佳-最坏-临近适应"><a href="#分配算法：首次-最佳-最坏-临近适应" class="headerlink" title="分配算法：首次 最佳 最坏 临近适应"></a>分配算法：首次 最佳 最坏 临近适应</h4><h2 id="非连续分配"><a href="#非连续分配" class="headerlink" title="非连续分配"></a>非连续分配</h2><h3 id="页式存储管理"><a href="#页式存储管理" class="headerlink" title="页式存储管理"></a>页式存储管理</h3><h4 id="概念：页面、地址结构、页表"><a href="#概念：页面、地址结构、页表" class="headerlink" title="概念：页面、地址结构、页表"></a>概念：页面、地址结构、页表</h4><h4 id="地址变化机构及变换过程"><a href="#地址变化机构及变换过程" class="headerlink" title="地址变化机构及变换过程"></a>地址变化机构及变换过程</h4><h4 id="快表"><a href="#快表" class="headerlink" title="快表"></a>快表</h4><h3 id="段式存储结构"><a href="#段式存储结构" class="headerlink" title="段式存储结构"></a>段式存储结构</h3><h4 id="段表、地址变换机构、段的共享与保护"><a href="#段表、地址变换机构、段的共享与保护" class="headerlink" title="段表、地址变换机构、段的共享与保护"></a>段表、地址变换机构、段的共享与保护</h4><h3 id="页段式存储结构"><a href="#页段式存储结构" class="headerlink" title="页段式存储结构"></a>页段式存储结构</h3><h4 id="页表-段表"><a href="#页表-段表" class="headerlink" title="页表 段表"></a>页表 段表</h4><h2 id="虚拟内存"><a href="#虚拟内存" class="headerlink" title="虚拟内存"></a>虚拟内存</h2><h3 id="概念"><a href="#概念" class="headerlink" title="概念"></a>概念</h3><h4 id="局部性原理"><a href="#局部性原理" class="headerlink" title="局部性原理"></a>局部性原理</h4><h4 id="特征"><a href="#特征" class="headerlink" title="特征"></a>特征</h4>多次性<br>对换性<br>虚拟性<h3 id="请求分页"><a href="#请求分页" class="headerlink" title="请求分页"></a>请求分页</h3><h4 id="组成：页表结构、缺页中断机构、地址变换机构"><a href="#组成：页表结构、缺页中断机构、地址变换机构" class="headerlink" title="组成：页表结构、缺页中断机构、地址变换机构"></a>组成：页表结构、缺页中断机构、地址变换机构</h4><h4 id="页面置换算法"><a href="#页面置换算法" class="headerlink" title="页面置换算法"></a>页面置换算法</h4><h4 id="页面分配策略"><a href="#页面分配策略" class="headerlink" title="页面分配策略"></a>页面分配策略</h4><h4 id="抖动、工作集"><a href="#抖动、工作集" class="headerlink" title="抖动、工作集"></a>抖动、工作集</h4></li>
</ul>
<h3 id="管理方式"><a href="#管理方式" class="headerlink" title="管理方式"></a>管理方式</h3><ul>
<li><p>连续分配</p>
<ul>
<li>单一连续分配：分配到内存固定区域，单任务系统</li>
<li>固定分区分配：分配到内存中不同的固定区域</li>
<li>动态分区分配<ul>
<li>基本概念：按照程序的需要进行动态的划分</li>
<li>分配算法<ul>
<li>首次适应：按地址从小到大为序，分配第一个符合条件的分区</li>
<li>最佳适应：按空间从小到大为序，分配第一个符合条件的分区</li>
<li>最坏适应：按空间从大到小为序，分配第一个符合条件的分区</li>
<li>临近适应：与首次适应相似，从上次查完的结束位置开始查找</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
<li>非连续分配<ul>
<li>基本分页：内存分为固定块，按物理结构划分，会有内部碎片</li>
<li>基本分段：内存块的大小不固定，按逻辑结构划分，会有外部碎片</li>
<li>段页式：基本分段和基本分页的结合，会有内部碎片</li>
</ul>
</li>
<li><p>内存扩充</p>
<ul>
<li>覆盖：预算设定覆盖段，覆盖掉暂时不需要的内容，通常在一个程序中继续</li>
<li>交换：吧处于等待的程序暂时移到外存，通常在不同程序键进行</li>
<li><p>虚拟内存</p>
<ul>
<li>引入：逻辑上扩充内存</li>
<li><p>组成部分</p>
<ul>
<li>页表机制：通过查表获取相关信息</li>
<li>中断机制：要访问也不在内存时产生缺页中断</li>
<li>地址变换机构：把逻辑地址变换成物理地址</li>
<li>内存与外存：需要一定容量的内存与外存的支持</li>
</ul>
</li>
<li><p>置换算法</p>
<ul>
<li>OPT：选择以后不用的页面</li>
<li>FIFO：选择最先装入的页面</li>
<li>LRU：选择最近最久未使用的页面</li>
<li>CLOCK：选择最近未用的页面</li>
<li>改进型clock：考虑页面修改问题</li>
</ul>
</li>
<li><p>地址翻译：TLB-&gt;页表&gt;cache&gt;主存&gt;外存</p>
</li>
</ul>
</li>
</ul>
</li>
</ul>

      
    </div>
    <footer class="article-footer">
      <a data-url="https://goofyer.gitee.io/notes-on-computer-expertise/2021/12/19/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F/%E7%AC%AC%E4%B8%89%E7%AB%A0%20%E5%86%85%E5%AD%98%E7%AE%A1%E7%90%86/" data-id="cl403sxrs002qf8vu0gfl1awt" data-title="第三章 内存管理" class="article-share-link">Share</a>
      
      
      
    </footer>
  </div>
  
</article>



  
    <article id="post-操作系统/第二章 进程管理" class="h-entry article article-type-post" itemprop="blogPost" itemscope itemtype="https://schema.org/BlogPosting">
  <div class="article-meta">
    <a href="/notes-on-computer-expertise/2021/12/19/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F/%E7%AC%AC%E4%BA%8C%E7%AB%A0%20%E8%BF%9B%E7%A8%8B%E7%AE%A1%E7%90%86/" class="article-date">
  <time class="dt-published" datetime="2021-12-19T01:24:30.000Z" itemprop="datePublished">2021-12-19</time>
</a>
    
  <div class="article-category">
    <a class="article-category-link" href="/notes-on-computer-expertise/categories/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F%E5%9F%BA%E7%A1%80%E7%9F%A5%E8%AF%86/">操作系统基础知识</a>
  </div>

  </div>
  <div class="article-inner">
    
    
      <header class="article-header">
        
  
    <h1 itemprop="name">
      <a class="p-name article-title" href="/notes-on-computer-expertise/2021/12/19/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F/%E7%AC%AC%E4%BA%8C%E7%AB%A0%20%E8%BF%9B%E7%A8%8B%E7%AE%A1%E7%90%86/">第二章 进程管理</a>
    </h1>
  

      </header>
    
    <div class="e-content article-entry" itemprop="articleBody">
      
        <h3 id="进程"><a href="#进程" class="headerlink" title="进程"></a>进程</h3><ul>
<li><p>概念：与程序的区别</p>
<ul>
<li>进程：一个具有一定独立功能的程序在一个数据集合上一次动态执行过程。</li>
<li><p>进程的组成</p>
<ul>
<li>程序的代码</li>
<li>程序处理的数据</li>
<li>程序计数器中的值（下一条将运行指令的地址）</li>
<li>一组通用的寄存器的当前值，堆，栈</li>
<li>一组系统资源（如打开的文件）</li>
</ul>
</li>
<li><p>进程与程序的联系</p>
<ul>
<li>1.程序是产生进程的基础。</li>
<li>2.程序的每次运行构成不同的进程。</li>
<li>3.进程是程序功能的体现。</li>
<li>4.通过多次执行，一个程序可对应多个进程；通过调用关系，一个进程可包括多个程序。</li>
</ul>
</li>
<li><p>进程与程序的区别</p>
<ul>
<li>1.进程是动态的，程序是静态。程序是有序代码的集合；进程是程序的执行，进程会涉及到核心态和用户态的切换。</li>
<li>2.进程是暂时的，程序是永久的。进程是一个状态变化的过程，程序可长久保存。</li>
<li>3.进程与程序的组成不同。</li>
<li>进程=程序+数据+进程控制块。</li>
</ul>
</li>
</ul>
</li>
<li><p>特征：动态性、并发性、独立性、异步性、结构性</p>
<ul>
<li>动态性：可动态地创建，结束进程。</li>
<li>并发性：进程可以被独立调度并占用处理机运行。</li>
<li>独立性：不同进程的工作不相互影响。</li>
<li>制约性：因访问共享数据或进程间同步而产生制约。</li>
</ul>
</li>
<li><p>状态：运行、就绪、阻塞、创建、结束</p>
<ul>
<li>运行状态：当一个进程正在处理机上运行时。</li>
<li>就绪状态：一个进程获得了除处理机之外的一切所需资源，一旦得到处理机即可运行。</li>
<li>等待（阻塞）状态：一个进程正在等待某一事件而暂停运行。</li>
<li>创建状态：一个进程正在被创建，还没被转到就绪状态之前的状态。</li>
<li>结束状态：一个进程正在从系统中消失时的状态。</li>
<li>就绪态→运行态：处于就绪态的进程被调度后，获得处理机资源，转换为运行态</li>
<li>运行态→就绪态：处于运行态的进程在时间片用完后，不得不让出处理机，从而进程转换</li>
<li>运行态→阻塞态：进程请求某一资源的使用和分配或等待某一事件的发生时，转换为阻塞态</li>
<li>阻塞态→就绪态：进程等待的事件到来，IO操作结束/中断结束时候，中断处理程序把相应进程转换</li>
</ul>
</li>
<li><p>控制：创建、终止、阻塞、唤醒、切换</p>
<ul>
<li><p>进程创建</p>
<ul>
<li><p>场景：</p>
<ul>
<li>1.系统初始化。</li>
<li>2.用户请求创建一个新进程。</li>
<li>3.正在运行的进程执行了创建进程的系统调用。</li>
<li>进程运行</li>
<li>内核选择一个就绪进程，让它占用处理机并执行（和处理机调度算法有关）。</li>
</ul>
</li>
</ul>
</li>
<li><p>进程等待（阻塞）</p>
<ul>
<li><p>场景：</p>
<ul>
<li>1.请求并等待系统服务，无法马上完成。</li>
<li>2.启动某种操作，无法马上完成。</li>
<li>.需要的数据没有到达。</li>
<li>注：进程只能自己阻塞自己，因为只有进程自身才能知道何时需要等待某种时间的发生。</li>
</ul>
</li>
</ul>
</li>
<li><p>进程唤醒</p>
<ul>
<li><p>场景：</p>
<ul>
<li>1.被阻塞进程需要的资源可被满足。</li>
<li>2.被阻塞进程等待的事件到达。</li>
<li>3.将该进程的PCB插入到就绪队列。</li>
<li>注：进程只能被别的进程或操作系统唤醒。</li>
</ul>
</li>
</ul>
</li>
<li><p>进程结束</p>
<ul>
<li><p>场景：</p>
<ul>
<li>正常退出（自愿）</li>
<li>错误退出（自愿）</li>
<li>致命错误（强制）</li>
<li>被其他进程所杀（强制）</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
<li><p>组织：进程控制块PCB、程序段、数据段</p>
<ul>
<li><p>进程控制块</p>
<ul>
<li>进程描述信息</li>
<li>进程控制和管理信息</li>
<li>资源分配清单</li>
<li>处理及相关信息</li>
</ul>
</li>
<li><p>程序段</p>
</li>
</ul>
</li>
<li><p>通信：共享存储、消息传递、管道通信、</p>
<ul>
<li><p>共享存储</p>
<ul>
<li><p>低级</p>
<ul>
<li>基于数据结构的共享</li>
</ul>
</li>
<li><p>高级</p>
<ul>
<li>基于存储区的共享</li>
</ul>
</li>
</ul>
</li>
<li><p>消息传递</p>
<ul>
<li><p>直接通信方式</p>
<ul>
<li>发送进程直接把消息发送给接收进程，并将它挂在接收进程的消息队列上，接收进程从消息缓冲队列中取得消息</li>
</ul>
</li>
<li><p>间接通信方式</p>
<ul>
<li>发送进程把消息发送到某个中间实体，接收进程从中间实体取得</li>
</ul>
</li>
</ul>
</li>
<li><p>管道通信</p>
<ul>
<li>连接一个管道文件</li>
</ul>
</li>
</ul>
</li>
<li><p>代价</p>
<ul>
<li><p>时间代价</p>
<ul>
<li>进程控制块及协调各运行机构所占用的内存空间开销</li>
</ul>
</li>
<li><p>空间代价</p>
<ul>
<li>进行进程间的切换，同步及通信等所付出的时间开销</li>
</ul>
</li>
</ul>
</li>
</ul>
<h3 id="线程"><a href="#线程" class="headerlink" title="线程"></a>线程</h3><ul>
<li><p>概念</p>
<ul>
<li>轻量级进程，不拥有任何系统资源</li>
</ul>
</li>
<li><p>线程和进程的区别</p>
<ul>
<li>1.进程是资源分配的单位，线程是CPU调度的单位。</li>
<li>2.进程拥有一个完整的资源平台，而线程只独享必不可少的资源，如寄存器和栈。</li>
<li>3.线程同样具有就绪，阻塞和执行三种基本状态，同样具有状态之间的转换。</li>
<li>4.线程能减少并发执行的时间和空间开销：</li>
</ul>
</li>
<li><p>属性</p>
<ul>
<li>线程是一个轻型实体，他不拥有系统资源，但每一个线程都有唯一一个标识符线程控制块，线程控制块记录了线程执行的寄存器和栈的现场状态</li>
<li>不同的线程可以执行相同的程序</li>
<li>同一进程中的各个线程共享该进程所拥有的资源</li>
<li>线程数处理机的独立调度单位，多个线程并发，交替占用</li>
<li>线程创建后开始生命周期，直到终止</li>
</ul>
</li>
<li><p>线程的实现</p>
<ul>
<li><p>用户线程：在用户空间实现。</p>
<ul>
<li><p>用户线程</p>
<ul>
<li>在用户空间实现的线程机制，它不依赖于操作系统的内核，由一组用户级的线程库函数来完成线程的管理，包括进程的创建，终止，同步和调度等。</li>
</ul>
</li>
<li><p>用户线程的缺点</p>
<ul>
<li>1.如果一个线程发起系统调用而阻塞，则整个进程在等待。</li>
<li>2.当一个线程开始运行后，除非它主动交出CPU的使用权，否则它所在的进程中的其他线程将无法运行。</li>
<li>3.由于时间片分配给进程，与其他进程比，在多线程执行时，每个线程得到的时间片较少，执行会较慢。</li>
</ul>
</li>
</ul>
</li>
<li><p>内核线程：在内核中实现。</p>
<ul>
<li><p>内核线程</p>
<ul>
<li>在操作系统的内核当中实现的一种线程机制，由操作系统的内核来完成线程的创建、终止和管理。</li>
<li>由内核来维护PCB和TCB；线程的创建，终止和切换都是通过系统调用/内核函数的方式来进行的，由内核来完成，因此系统开销大。</li>
<li>在一个进程当中，如果某个内核线程发起系统调用而被阻塞，并不会影响其他内核线程的运行；时间片是以线程为单位分配的，多线程的进程获得更多的CPU时间；</li>
</ul>
</li>
</ul>
</li>
<li><p>轻量级进程：在内核中实现，支持用户线程。</p>
<ul>
<li><p>轻量级进程</p>
<ul>
<li>是内核支持的用户线程，一个进程可有一个或多个轻量级进程，每个轻量级进程由一个单独的内核线程来支持。</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
<li>线程的实现<ul>
<li>多线程模型<br>  有些系统同时支持用户线程和内核线程，由此产生了不同的多线程模型，即实现用户级线程和内核级线程的连接方式。</li>
<li>1)多对一模型。<ul>
<li>将多个用户级线程映射到一个内核级线程，线程管理在用户空间完成。此模式中,用户级线程对操作系统不可见（即透明)。<ul>
<li>优点:线程管理是在用户空间进行的，因而效率比较高。</li>
<li>缺点:一个线程在使用内核服务时被阻塞,整个进程都会被阻塞:多个线程不能并行地运行在多处理机上。</li>
</ul>
</li>
</ul>
</li>
<li>2）一对一模型。<ul>
<li>将每个用户级线程映射到一个内核级线程。<ul>
<li>优点:当一个线程被阻塞后，允许另一个线程继续执行，所以并发能力较强。</li>
<li>缺点:每创建一个用户级线程都需要创建一个内核级线程与其对应，这样创建线程的开销比较大，会影响到应用程序的性能。</li>
</ul>
</li>
</ul>
</li>
<li>3)多对多模型<ul>
<li>将n个用户级线程映射到m个内核级线程上，要求m≤n.<ul>
<li>特点：多对多模型是多对一模型和一对一模型的折中，既克服了多对一模型并发不够的缺点，又克服了一对一模型的一个用户进程占用太多内核级线程而开销太大的缺点。此外，还拥有多对一和一对一各自的优点，可谓集两者之所长<h3 id="处理机调度"><a href="#处理机调度" class="headerlink" title="处理机调度"></a>处理机调度</h3></li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
<li>概念：<ul>
<li>三级调度<br>其主要任务是按一定的原则从外存上处于后备状态的作业中挑选一个(或多个）作业，给它（们)分配内存、输入/输出设备等必要的资源，并建立相应的进程，以使它（们）获得竞争处理机的权利。简言之，作业调度就是内存与辅存之间的调度。对于每个作业只调入一次、调出一次。多道批处理系统中大多配有作业调度，而其他系统中通常不需要配置作业调度。作业调度的执行频率较低，通常为几分钟一次。</li>
<li>作业调度<br>其作用是提高内存利用率和系统吞吐量。为此，应将那些暂时不能运行的进程调至外存等待，把此时的进程状态称为挂起态。当它们已具备运行条件且内存又稍有空闲时，由中级调度来决定把外存上的那些已具备运行条件的就绪进程,再重新调入内存，并修改其状态为就绪态,挂在就绪队列上等待。</li>
<li>中级调度<br>其主要任务是按照某种方法和策略从就绪队列中选取一个进程，将处理机分配给它。进程调度是操作系统中最基本的一种调度，在一般的操作系统中都必须配置进程调度。进程调度的频率很高，一般几十毫秒一次。</li>
</ul>
</li>
<li><p>进程调度</p>
<ul>
<li>调度方式：剥夺式、非剥夺式</li>
<li>调度准则：CPU利用率、吞吐量、周转时间、等待时间、响应时间</li>
</ul>
</li>
<li><p>衡量调度算法的指标</p>
<ul>
<li><p>吞吐量</p>
<ul>
<li>在单位时间内完成的进程数量（操作系统的计算带宽）。</li>
</ul>
</li>
<li><p>周转时间</p>
<ul>
<li>一个进程从初始化到结束，包括所有等待时间所花费的时间。<br>周转时间=作业完成时间-作业提交时间<br>平均周转时间=(作业周转时间+……+作业周转时间)/n<script type="math/tex; mode=display">
带权周转时间=\frac{作业周转时间}{作业实际运行时间}</script></li>
</ul>
</li>
<li><p>等待时间</p>
<ul>
<li>进程在就绪队列中的总时间。</li>
</ul>
</li>
<li><p>响应时间</p>
<ul>
<li>从一个请求被提交到产生第一次响应所花费的总时间（操作系统的计算延迟）。</li>
</ul>
</li>
</ul>
</li>
<li><p>基本调度算法</p>
<ul>
<li><p>FCFS（First-Come First-Served，先来先服务）</p>
<ul>
<li><p>思路</p>
<ul>
<li>处理机按照任务到达的顺序来调度。如果进程在执行中阻塞，队列中的下一个会得到CPU。</li>
</ul>
</li>
<li><p>优点</p>
<ul>
<li>实现简单。</li>
</ul>
</li>
<li><p>缺点</p>
<ul>
<li>1.平均等待时间波动较大。受制于前面执行之间较长的进程。</li>
<li>2.花费时间少的任务可能排在花费时间长的任务后面。</li>
<li>3.可能导致IO和CPU之间的重叠处理：CPU密集型进程会导致IO设备闲置时，IO密集型进程也在等待。</li>
</ul>
</li>
</ul>
</li>
<li><p>SJF（Short Job First，短进程优先）</p>
<ul>
<li><p>思路</p>
<ul>
<li>将执行时间短的先执行。</li>
<li>注：这种算法可以是抢占也可以是不抢占的。当CPU执行时，发现新来的进程处理时间更短。如果是非抢占式则排到队列的第一个；如果是抢占式则将当前的进程转换为就绪态，自己接受CPU的执行。</li>
</ul>
</li>
<li><p>优点</p>
<ul>
<li>当短作业占有很大比例时，能使他们能比长作业更优先执行；</li>
<li>平均等待时间最小，平均周转时间最小。</li>
</ul>
</li>
<li><p>缺点</p>
<ul>
<li>1.可能导致饥饿：连续的段任务会让长任务饥饿；短任务可用时的任何长任务的CPU时间都会增加平均等待时间。</li>
<li>2.需要预知未来，估算作业的运行时间。</li>
<li>3.不能保证紧迫性作业能得到即时处理。</li>
</ul>
</li>
</ul>
</li>
<li><p>HRRN（Highest Response Ratio Next，最高响应时间比优先）</p>
<ul>
<li><p>思路</p>
<ul>
<li>关注进程等待了多长时间，防止无限期推迟。相当于总和考虑进程的执行时间和等待时间。不可抢占。</li>
<li>R=（w+s）/s</li>
<li>R：响应时间比</li>
<li>w：等待时间</li>
<li>s：执行时间</li>
<li>选择R值最高的进程。</li>
</ul>
</li>
</ul>
</li>
<li><p>RR（Round Robin，轮询）</p>
<ul>
<li><p>思路</p>
<ul>
<li>让每个进程在就绪队列中的等待时间与享受服务的时间成正比例。</li>
<li>1.系统根据FCFS策略将所有进程排成一个就绪队列，设置一定时间产生一次中断。</li>
<li>2.激活系统中的进程调度程序，完成一次调度。每次中断后都将CPU分配给队首进程。</li>
</ul>
</li>
<li><p>时间片大小的设定</p>
<ul>
<li>如果选很小，则有利于短作业，但会频繁地进行上下文切换，增加系统开销；如果很长，为使每个进程都能在一个时间片内完成，就退化为FCFS算法。</li>
<li>一般取略大于一次典型交互所需时间，使大多数交互式进程能在一个时间片内完成。</li>
</ul>
</li>
</ul>
</li>
<li><p>MFQ（Multileved Feedback Queue，多级反馈队列）</p>
<ul>
<li><p>思路</p>
<ul>
<li>设有n级优先级，一个进程可以在不同的队列中移动。</li>
<li>优先级变化条件</li>
<li>调度的时间片大小随优先级增加而减小；</li>
<li>如果任务在当前的时间片中没有完成，则降到下一个优先级。</li>
</ul>
</li>
<li><p>过程</p>
<ul>
<li>（1）设置多个就绪队列，为每个队列分配不同优先级，优先级越高，时间片越小。第一队列优先级最高，第二次之，以此类推。</li>
<li>（2）每个队列都采用FCFS算法。当新进程进入内存后，就放在队尾。当第一个时间片中没有完成，就放入第二队列的队尾，以此类推。最终放到第n队列后会用RR方式调度。</li>
<li>（3）按队列优先级调度程序。当第一队列为空时，才调度第二队列。</li>
</ul>
</li>
<li><p>优点</p>
<ul>
<li>CPU密集型任务的优先级下降很快；</li>
<li>达到IO密集型的进程优先级高。</li>
</ul>
</li>
</ul>
</li>
<li><p>FSS（Fair Share Scheduling，公平共享调度）</p>
<ul>
<li><p>思路</p>
<ul>
<li>保证每个进程都获得相同的处理机时间。一般用来控制用户对系统资源的访问。</li>
</ul>
</li>
<li><p>优点</p>
<ul>
<li>1.保证不重要的进程无法垄断资源。</li>
<li>2.未使用的资源按照每个组所分配的资源比例来分配。</li>
<li>3.没有达到资源使用率目标的进程获得更高的优先级。</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul>
<h3 id="进程同步"><a href="#进程同步" class="headerlink" title="进程同步"></a>进程同步</h3><ul>
<li><p>概念：临界资源、同步、互斥</p>
<ul>
<li><p>临界区是指进程中用于访问互斥共享资源的那段代码</p>
<ul>
<li>P（）{<br>while（）{<br>wait（mutex）；<br>临界区；<br>signal（mutex）；<br>剩余区；<br>}<br>}</li>
</ul>
</li>
<li><p>临界资源</p>
<ul>
<li>进入区：为了进入临界区使用临界资源</li>
<li>临界区：进程中访问临界资源的那段代码</li>
<li>退出区：将正在访问临界区的标志消除</li>
<li>剩余区：代码中的其余部分</li>
</ul>
</li>
<li><p>同步</p>
<ul>
<li>某些程序为了完成某任务而建立多个进程，这些进程为了完成一项任务而相互合作，在某些位置上协调他们的工作次序，传递信息。同步源于合作。</li>
</ul>
</li>
<li><p>互斥</p>
<ul>
<li>当一个进程处于临界区并访问共享资源时，没有其他进程会处于临界区并且访问任何相同的共享资源。</li>
</ul>
</li>
</ul>
</li>
<li><p>实现方法：软件实现的几种算法、硬件实现</p>
<ul>
<li><p>在实现上，应该考虑的一些原则：</p>
<ul>
<li><p>空闲让进</p>
<ul>
<li>当临界区空闲时，允许一个请求进入临界区的进程进入临界区。</li>
</ul>
</li>
<li><p>忙则等待</p>
<ul>
<li>当临界区正在被访问时，试图进入临界区的其他资源应该等待。保持对临界区的互斥访问。</li>
</ul>
</li>
<li><p>有限等待</p>
<ul>
<li>如果一个线程处于入口，那么在其请求被接受之前，其他线程进入临界区的事件是有限制的。</li>
</ul>
</li>
<li><p>无忙等待</p>
<ul>
<li>如果一个进程在等待进入临界区，那么在它可以进入之前会被挂起。</li>
<li>实现互斥的方法有基于硬件和基于软件的解决方案。</li>
</ul>
</li>
</ul>
</li>
<li><p>基本方法</p>
<ul>
<li><p>软件实现</p>
<ul>
<li>单标志法：违背空间让进原则</li>
<li>双标志法先检查：违背忙则等待原则</li>
<li>双标志法后检查：会导致饥饿现象</li>
<li>皮特森算法：单标志法和双标志法后检查的结合</li>
</ul>
</li>
<li><p>硬件实现</p>
<ul>
<li>中断屏障法：进区关中断，出区开中断</li>
<li>硬件指令法：设立原子操作指令</li>
</ul>
</li>
<li><p>信号量：利用PV操作实现互斥</p>
</li>
</ul>
</li>
</ul>
</li>
<li><p>管程</p>
<ul>
<li>定义：由一组数据以及定义在这组数据之上的对这组数据的操作组成的软件模块</li>
<li><p>组成</p>
<ul>
<li>局部于管程的共享结构数据说明</li>
<li>对该数据结构进行操作的一组过程</li>
<li>对局部于管程的共享数据设置初始值的语句</li>
</ul>
</li>
</ul>
</li>
<li><p>信号量：整形、记录型</p>
</li>
<li><p>经典问题</p>
<ul>
<li><p>生产者消费者问题</p>
<ul>
<li>子主题 1</li>
</ul>
</li>
</ul>
</li>
</ul>
<h3 id="死锁"><a href="#死锁" class="headerlink" title="死锁"></a>死锁</h3><ul>
<li>定义</li>
<li>原因：系统资源竞争、进程推进顺序非法</li>
<li>条件：互斥、不剥夺、请求和保持、循环等待</li>
<li>策略：预防死锁、避免死锁、死锁的检测和解除</li>
<li><p>预防死锁</p>
<ul>
<li>破坏互斥条件：有些资源必须互斥使用，无法破坏互斥条件</li>
<li>破坏不剥夺条件：增加系统开销，降低吞吐量</li>
<li>破坏请求和保持条件：严重浪费系统资源，还可以导致饥饿难度</li>
<li>破坏循环等待条件：浪费系统资源，还可能导致饥饿现象</li>
</ul>
</li>
<li><p>避免死锁</p>
<ul>
<li>安全状态：能找到一个分配资源的序列能让所以进程都顺序完成</li>
<li>银行加算法：采用与分配策略检查分配完成时系统是否处在安全状态</li>
</ul>
</li>
<li><p>检测死锁</p>
<ul>
<li>利用死锁定理化简资源分配图已检测死锁的存在</li>
</ul>
</li>
<li><p>解除死锁</p>
<ul>
<li>资源剥夺法：挂起某些死锁进程并抢占</li>
<li>撤销进程法：强制撤销部分，甚至全部死锁进程并剥夺这些进程的资源</li>
<li>进程回退法：让一个多多个进程回退到足以回避死锁的地步</li>
</ul>
</li>
</ul>

      
    </div>
    <footer class="article-footer">
      <a data-url="https://goofyer.gitee.io/notes-on-computer-expertise/2021/12/19/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F/%E7%AC%AC%E4%BA%8C%E7%AB%A0%20%E8%BF%9B%E7%A8%8B%E7%AE%A1%E7%90%86/" data-id="cl403sxrs002rf8vu09hoakc7" data-title="第二章 进程管理" class="article-share-link">Share</a>
      
      
      
    </footer>
  </div>
  
</article>



  
    <article id="post-操作系统/第四章文件管理" class="h-entry article article-type-post" itemprop="blogPost" itemscope itemtype="https://schema.org/BlogPosting">
  <div class="article-meta">
    <a href="/notes-on-computer-expertise/2021/12/19/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F/%E7%AC%AC%E5%9B%9B%E7%AB%A0%E6%96%87%E4%BB%B6%E7%AE%A1%E7%90%86/" class="article-date">
  <time class="dt-published" datetime="2021-12-19T01:24:30.000Z" itemprop="datePublished">2021-12-19</time>
</a>
    
  <div class="article-category">
    <a class="article-category-link" href="/notes-on-computer-expertise/categories/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F%E5%9F%BA%E7%A1%80%E7%9F%A5%E8%AF%86/">操作系统基础知识</a>
  </div>

  </div>
  <div class="article-inner">
    
    
      <header class="article-header">
        
  
    <h1 itemprop="name">
      <a class="p-name article-title" href="/notes-on-computer-expertise/2021/12/19/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F/%E7%AC%AC%E5%9B%9B%E7%AB%A0%E6%96%87%E4%BB%B6%E7%AE%A1%E7%90%86/">第四章 文件管理</a>
    </h1>
  

      </header>
    
    <div class="e-content article-entry" itemprop="articleBody">
      
        <h2 id="第四章文件管理"><a href="#第四章文件管理" class="headerlink" title="第四章文件管理"></a>第四章文件管理</h2><h3 id="1概念"><a href="#1概念" class="headerlink" title="1概念"></a>1概念</h3><ul>
<li>1.1定义</li>
<li>1.2属性</li>
<li>1.3基本操作</li>
<li>1.4打开与关闭</li>
</ul>
<h3 id="2文件逻辑结构"><a href="#2文件逻辑结构" class="headerlink" title="2文件逻辑结构"></a>2文件逻辑结构</h3><ul>
<li>2.1无结构文件（流式文件）</li>
<li><p>2.2有结构文件（记录式文件）</p>
<ul>
<li>2.2.1顺序文件</li>
<li>2.2.2索引文件</li>
<li>2.2.3索引顺序文件</li>
</ul>
</li>
</ul>
<h3 id="3目录结构"><a href="#3目录结构" class="headerlink" title="3目录结构"></a>3目录结构</h3><ul>
<li>3.1文件控制块</li>
<li>3.2索引节点</li>
<li>3.3单级目录结构</li>
<li>3.4俩级目录结构</li>
<li>3.5树形目录结构</li>
<li>3.6图形目录结构</li>
</ul>
<h3 id="4文件共享"><a href="#4文件共享" class="headerlink" title="4文件共享"></a>4文件共享</h3><ul>
<li>4.1基于索引结点（硬链接）</li>
<li>4.2利用符号链实现（软连接）</li>
</ul>
<h3 id="5文件保护"><a href="#5文件保护" class="headerlink" title="5文件保护"></a>5文件保护</h3><ul>
<li>5.1访问类型</li>
<li>5.2访问控制</li>
</ul>
<h3 id="6实现"><a href="#6实现" class="headerlink" title="6实现"></a>6实现</h3><ul>
<li>6.1层次结构</li>
<li><p>目录实现</p>
<ul>
<li><p>先行列表</p>
<ul>
<li>无序：查找文件较慢，新建文件较快</li>
<li>有序：查找文件较快，新建文件较慢</li>
</ul>
</li>
<li><p>哈希表：查找新建速度较快，有冲突</p>
</li>
</ul>
</li>
<li><p>文件分配</p>
<ul>
<li>连续分配：在磁盘上连续存放文件</li>
<li><p>连接分配：</p>
<ul>
<li>隐式：采用类似链表的结果</li>
<li>显示：吧隐式文件中的指针单独抽离出来</li>
</ul>
</li>
<li><p>索引分配</p>
<ul>
<li>索引链接</li>
<li>多层索引</li>
<li>混合所以</li>
</ul>
</li>
</ul>
</li>
<li><p>文件存储空间管理</p>
<ul>
<li>空闲表法：把所有空闲块组织成表</li>
<li>空闲链表法：把所有空闲快组成链表</li>
<li>位示图法：利用二进制的每位记录空闲块</li>
<li>成组链接法：空闲表和空闲链表的结合</li>
</ul>
</li>
</ul>
<h3 id="磁盘"><a href="#磁盘" class="headerlink" title="磁盘"></a>磁盘</h3><ul>
<li><p>访问时间</p>
<ul>
<li>寻道时间</li>
<li>延迟时间</li>
<li>传输时间</li>
</ul>
</li>
<li><p>调度算法</p>
<ul>
<li>先来先服务FCFS</li>
<li>最短寻找时间优先</li>
<li>扫描算法SCAN</li>
<li>循环扫描</li>
</ul>
</li>
<li><p>磁盘管理</p>
<ul>
<li>初始化</li>
<li>引导快</li>
<li>坏块</li>
</ul>
</li>
</ul>

      
    </div>
    <footer class="article-footer">
      <a data-url="https://goofyer.gitee.io/notes-on-computer-expertise/2021/12/19/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F/%E7%AC%AC%E5%9B%9B%E7%AB%A0%E6%96%87%E4%BB%B6%E7%AE%A1%E7%90%86/" data-id="cl403sxrt002sf8vudmud8kaw" data-title="第四章 文件管理" class="article-share-link">Share</a>
      
      
      
    </footer>
  </div>
  
</article>



  


  <nav id="page-nav">
    
    <a class="extend prev" rel="prev" href="/notes-on-computer-expertise/page/11/">&laquo; Prev</a><a class="page-number" href="/notes-on-computer-expertise/">1</a><span class="space">&hellip;</span><a class="page-number" href="/notes-on-computer-expertise/page/10/">10</a><a class="page-number" href="/notes-on-computer-expertise/page/11/">11</a><span class="page-number current">12</span><a class="page-number" href="/notes-on-computer-expertise/page/13/">13</a><a class="page-number" href="/notes-on-computer-expertise/page/14/">14</a><a class="extend next" rel="next" href="/notes-on-computer-expertise/page/13/">Next &raquo;</a>
  </nav>

</section>
        
          <aside id="sidebar">
  
    
  <div class="widget-wrap">
    <h3 class="widget-title">Categories</h3>
    <div class="widget">
      <ul class="category-list"><li class="category-list-item"><a class="category-list-link" href="/notes-on-computer-expertise/categories/C-%E5%B7%A5%E5%85%B7/">C#工具</a></li><li class="category-list-item"><a class="category-list-link" href="/notes-on-computer-expertise/categories/C-%E5%B7%A5%E5%85%B7/">C++工具</a></li><li class="category-list-item"><a class="category-list-link" href="/notes-on-computer-expertise/categories/Mysql/">Mysql</a></li><li class="category-list-item"><a class="category-list-link" href="/notes-on-computer-expertise/categories/blender/">blender</a></li><li class="category-list-item"><a class="category-list-link" href="/notes-on-computer-expertise/categories/linux/">linux</a></li><li class="category-list-item"><a class="category-list-link" href="/notes-on-computer-expertise/categories/manim/">manim</a></li><li class="category-list-item"><a class="category-list-link" href="/notes-on-computer-expertise/categories/spring/">spring</a></li><li class="category-list-item"><a class="category-list-link" href="/notes-on-computer-expertise/categories/vba%E5%9F%BA%E7%A1%80%E6%93%8D%E4%BD%9C/">vba基础操作</a></li><li class="category-list-item"><a class="category-list-link" href="/notes-on-computer-expertise/categories/%E5%88%9B%E9%80%A0%E6%A8%A1%E5%BC%8F/">创造模式</a></li><li class="category-list-item"><a class="category-list-link" href="/notes-on-computer-expertise/categories/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F/">操作系统</a></li><li class="category-list-item"><a class="category-list-link" href="/notes-on-computer-expertise/categories/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F%E5%9F%BA%E7%A1%80%E7%9F%A5%E8%AF%86/">操作系统基础知识</a></li><li class="category-list-item"><a class="category-list-link" href="/notes-on-computer-expertise/categories/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F%E5%BC%80%E5%8F%91/">操作系统开发</a></li><li class="category-list-item"><a class="category-list-link" href="/notes-on-computer-expertise/categories/%E6%95%B0%E5%AD%A6/">数学</a></li><li class="category-list-item"><a class="category-list-link" href="/notes-on-computer-expertise/categories/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/">数据结构</a></li><li class="category-list-item"><a class="category-list-link" href="/notes-on-computer-expertise/categories/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84%E5%9F%BA%E7%A1%80%E7%9F%A5%E8%AF%86/">数据结构基础知识</a></li><li class="category-list-item"><a class="category-list-link" href="/notes-on-computer-expertise/categories/%E6%A8%A1%E6%9D%BF/">模板</a></li><li class="category-list-item"><a class="category-list-link" href="/notes-on-computer-expertise/categories/%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0/">深度学习</a></li><li class="category-list-item"><a class="category-list-link" href="/notes-on-computer-expertise/categories/%E8%8B%B1%E8%AF%AD/">英语</a></li><li class="category-list-item"><a class="category-list-link" href="/notes-on-computer-expertise/categories/%E8%99%9A%E5%B9%BB4/">虚幻4</a></li><li class="category-list-item"><a class="category-list-link" href="/notes-on-computer-expertise/categories/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BB%84%E6%88%90%E5%8E%9F%E7%90%86/">计算机组成原理</a></li><li class="category-list-item"><a class="category-list-link" href="/notes-on-computer-expertise/categories/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BD%91%E7%BB%9C/">计算机网络</a></li></ul>
    </div>
  </div>


  
    
  <div class="widget-wrap">
    <h3 class="widget-title">Tags</h3>
    <div class="widget">
      <ul class="tag-list" itemprop="keywords"><li class="tag-list-item"><a class="tag-list-link" href="/notes-on-computer-expertise/tags/C/" rel="tag">C++</a></li></ul>
    </div>
  </div>


  
    
  <div class="widget-wrap">
    <h3 class="widget-title">Tag Cloud</h3>
    <div class="widget tagcloud">
      <a href="/notes-on-computer-expertise/tags/C/" style="font-size: 10px;">C++</a>
    </div>
  </div>

  
    
  <div class="widget-wrap">
    <h3 class="widget-title">Archives</h3>
    <div class="widget">
      <ul class="archive-list"><li class="archive-list-item"><a class="archive-list-link" href="/notes-on-computer-expertise/archives/2022/05/">May 2022</a></li><li class="archive-list-item"><a class="archive-list-link" href="/notes-on-computer-expertise/archives/2022/03/">March 2022</a></li><li class="archive-list-item"><a class="archive-list-link" href="/notes-on-computer-expertise/archives/2022/02/">February 2022</a></li><li class="archive-list-item"><a class="archive-list-link" href="/notes-on-computer-expertise/archives/2022/01/">January 2022</a></li><li class="archive-list-item"><a class="archive-list-link" href="/notes-on-computer-expertise/archives/2021/12/">December 2021</a></li></ul>
    </div>
  </div>


  
    
  <div class="widget-wrap">
    <h3 class="widget-title">Recent Posts</h3>
    <div class="widget">
      <ul>
        
          <li>
            <a href="/notes-on-computer-expertise/2022/05/31/vue/%E5%89%8D%E7%AB%AF%E6%A1%86%E6%9E%B6%E9%AA%8C%E8%AF%81%E7%A0%81%E6%97%A0%E6%B3%95%E6%98%BE%E7%A4%BA/">(no title)</a>
          </li>
        
          <li>
            <a href="/notes-on-computer-expertise/2022/05/26/%E6%95%B0%E6%8D%AE%E5%BA%93/navicat%E5%AE%89%E8%A3%85/">(no title)</a>
          </li>
        
          <li>
            <a href="/notes-on-computer-expertise/2022/05/25/%E8%99%9A%E5%B9%BB4%E5%BC%95%E6%93%8E%E5%BC%80%E5%8F%91/%E8%99%9A%E5%B9%BB%E5%9B%9B%20mod%E5%88%B6%E4%BD%9C/">(no title)</a>
          </li>
        
          <li>
            <a href="/notes-on-computer-expertise/2022/05/23/python/python%E6%89%B9%E9%87%8F%E7%94%9F%E6%88%90%E6%95%B0%E6%8D%AE/">(no title)</a>
          </li>
        
          <li>
            <a href="/notes-on-computer-expertise/2022/05/23/vba%E5%9F%BA%E7%A1%80%E6%93%8D%E4%BD%9C%E7%AC%94%E8%AE%B0/EXCEL%E5%9F%BA%E7%A1%80%E6%95%99%E7%A8%8B/">(no title)</a>
          </li>
        
      </ul>
    </div>
  </div>

  
</aside>
        
      </div>
      <footer id="footer">
  
  <div class="outer">
    <div id="footer-info" class="inner">
      
      &copy; 2022 John Doe<br>
      Powered by <a href="https://hexo.io/" target="_blank">Hexo</a>
    </div>
  </div>
</footer>

    </div>
    <nav id="mobile-nav">
  
    <a href="/notes-on-computer-expertise/" class="mobile-nav-link">Home</a>
  
    <a href="/notes-on-computer-expertise/archives" class="mobile-nav-link">Archives</a>
  
</nav>
    


<script src="/notes-on-computer-expertise/js/jquery-3.4.1.min.js"></script>



  
<script src="/notes-on-computer-expertise/fancybox/jquery.fancybox.min.js"></script>




<script src="/notes-on-computer-expertise/js/script.js"></script>





  </div>
<script type="text/x-mathjax-config">
    MathJax.Hub.Config({
        tex2jax: {
            inlineMath: [ ["$","$"], ["\\(","\\)"] ],
            skipTags: ['script', 'noscript', 'style', 'textarea', 'pre', 'code'],
            processEscapes: true
        }
    });
    MathJax.Hub.Queue(function() {
        var all = MathJax.Hub.getAllJax();
        for (var i = 0; i < all.length; ++i)
            all[i].SourceElement().parentNode.className += ' has-jax';
    });
</script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-MML-AM_CHTML"></script>
</body>
</html>